iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 12
0
自我挑戰組

GAME30天系列 第 12

VueFire intro. (2/2

  • 分享至 

  • xImage
  •  

至於寫入db, VueFire 其實還會在背後幫你的 vue instance 新增一個 $firebaseRefs 的屬性, $firebaseRefs的屬性綁定到你要綁定的DB節點, 所以新增可以這樣改寫

set() {
  let {name, age} = this;
  this.$firebaseRefs.users.push({
    name,
    age
  })
}

name 輸入 master, age 輸入 66
https://ithelp.ithome.com.tw/upload/images/20171222/20107379cbDcsi4SYg.png

如果要新增在一開始 config 中沒有綁定的屬性怎麼辦?
可以另外做綁定, 效果是一樣的

mounted() {
  this.$bindAsArray('test', DB.ref('users/test'))
}

到 dev tools 查看
https://ithelp.ithome.com.tw/upload/images/20171222/2010737911wT4sXKBv.png

當然也可以綁定物件, 第三個參數是 cancelCallback, 第四個是readyCallback, 若不需要可傳入 null

vm.$bindAsObject('user', myFirebaseRef.child('user'), null, () => console.log('Ready fired!'))

vm.$unbind('user') //解除綁定

更新DB可以這麼做

updateItem() {
  let [andy] = this.users.filter(user => user.name === 'andy')
  let key = andy['.key']
  andy.age = 78
  delete andy['.key']  // 記得把VueFire幫你插入的key拿掉再存入
  this.$firebaseRefs.users.child(key).set(andy)
} 

https://ithelp.ithome.com.tw/upload/images/20171222/2010737903Vt1ytHNY.png

andy的年齡變更成78了, 但怎麼資料也新增了另外一andy ?
這是因為andy指向的是這個 instance 的 andy,改善一下:

updateItem() {
  let [andy] = this.users.filter(user => user.name === 'andy')
  andy = {...andy}
  let key = andy['.key']
  andy.age = 20
  delete andy['.key']
  this.$firebaseRefs.users.child(key).set(andy)
} 

也可以這樣

updateItem() {
  let andy = {...this.users.filter(user => user.name === 'andy')
                           .reduce(andy => andy)}
  let key = andy['.key']
  andy.age = 22
  delete andy['.key']
  this.$firebaseRefs.users.child(key).set(andy)
} 

或是

updateItem() {
  let andy = Object.assign({}, 
             this.users.filter(user => user.name === 'andy')[0]);
  let key = andy['.key']
  andy.age = 23
  delete andy['.key']
  this.$firebaseRefs.users.child(key).set(andy)
},

如果name不重複才可以這樣用filter!

https://ithelp.ithome.com.tw/upload/images/20171222/20107379eBaTES8G23.png
andy拷貝過後就正常了

終於來到最後最簡單的刪除資料

deleteItem() {
  this.$firebaseRefs.users.child(this.users[0]).remove()
}

https://ithelp.ithome.com.tw/upload/images/20171222/20107379mAN9dD3kAO.png
andy已經消失了


上一篇
VueFire intro. (1/2
下一篇
webSocket intro. (1/4
系列文
GAME30天30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言